﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<unordered_map>
#include<string>
using namespace std;
bool isUnique(string astr) 
{
	int hash=0;
	for (int i = 0; i < astr.size(); i++)
	{
		int j = astr[i] - 'a';
		int tmp = hash;
		if (((tmp >> j) & 1) == 0)
			hash |= (1 << j);
		else
			return false;
	}
	return true;
}
int missingNumber(vector<int>& nums)
{
	int ret = 0;
	for (int i = 0; i < nums.size(); i++)
	{
		ret ^= nums[i];
	}
	for (int i = 0; i <= nums.size(); i++)
	{
		ret ^= i;
	}
	return ret;
}
int getSum(int a, int b) 
{
	while (b!=0)
	{
		a = a ^ b;//算出无进位相加的结果
		b = (a & b) << b;
	}
	return a;
}
int singleNumber(vector<int>& nums) 
{
	int ret = 0;
	for (int i = 0; i < 32; i++) // 依次去修改 ret 中的每⼀位
	{
		int sum = 0;
		for (int x : nums) // 计算nums中所有的数的第 i 位的和
			if (((x >> i) & 1) == 1)
				sum++;
		sum %= 3;
		if (sum == 1) ret |= 1 << i;
	}
	return ret;
}
vector<int> missingTwo(vector<int>& nums)
{
	int tmp = 0;
	for (int i = 0; i < nums.size(); i++)
	{
		tmp ^= nums[i];
	}
	for (int i = 1; i <=nums.size()+2; i++)
	{
		tmp ^= i;
	}
	int pos = 0;
	while (1)
	{
		if (((tmp >> pos) & 1) == 1)
		{
			break;
		}
		pos++;
	}
	int a = 0, b = 0;
	for (int i = 0; i < nums.size(); i++)
	{
		if (((nums[i] >> pos) & 1) == 1)
			a ^= nums[i];
		else
			b ^= nums[i];
	}
	for (int i = 1; i <=nums.size()+2; i++)
	{
		if (((i >> pos) & 1) == 1)
			a ^= i;
		else
			b ^= i;
	}
	return { a,b };
}

//int main()
//{
//	int n = 0, q = 0;
//	cin >> n>>q;
//	vector<int> v{n};
//	for (int i = 0; i < n; i++)
//	{
//		cin >> v[i];
//	}
//	vector<int> dp{n};
//	dp[0] = v[0];
//	for (int i = 1; i < n; i++)
//	{
//		dp[i] = dp[i - 1] + v[i];
//	}
//	while (q--)
//	{
//		int l, r;
//		cin >> l >> r;
//		cout << dp[r] - dp[l]+v[l] << endl;
//	}
//	return 0;
//}
int pivotIndex(vector<int>& nums) 
{
	int n = nums.size();
	vector<int> lsum(n), rsum(n);
	for (int i = 1; i < n; i++)
	{
		lsum[i] = lsum[i - 1] + nums[i - 1];
	}
	for (int i = n-2; i>=0; i--)
	{
		rsum[i] = rsum[i + 1] + nums[i + 1];
	}
	for (int i = 0; i < n; i++)
	{
		if (lsum[i] == rsum[i])
		{
			return i;
		}
	}
	return -1;
}
int main()
{
	int n, m, q;
	cin >> n >> m >> q;
	int arr[1010][1010] = { 0 };
	long long dp[1010][1010] = { 0 };
	for (int i = 1; i <=n; i++)
	{
		for (int j = 1; j <=m; j++)
		{
			cin >> arr[i][j];
		}
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + arr[i][j];
		}
	}
	while (q--)
	{
		int x1, y1, x2, y2;
		cin >> x1 >> y1 >> x2 >> y2;
		cout << dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1 - 1][y1 - 1] << endl;
	}
	return 0;
}